LLM Inference API به شما امکان میدهد مدلهای زبان بزرگ (LLM) را کاملاً روی دستگاه اجرا کنید، که میتوانید از آنها برای انجام طیف گستردهای از وظایف، مانند تولید متن، بازیابی اطلاعات به شکل زبان طبیعی و خلاصهسازی اسناد استفاده کنید. این وظیفه پشتیبانی داخلی از چندین مدل زبان بزرگ متن به متن را ارائه میکند، بنابراین میتوانید آخرین مدلهای هوش مصنوعی تولیدی روی دستگاه را در برنامهها و محصولات خود اعمال کنید.
این وظیفه پشتیبانی داخلی برای انواع LLM فراهم می کند. مدلهایی که در صفحه انجمن LiteRT میزبانی میشوند در قالبی مناسب برای MediaPipe در دسترس هستند و نیازی به مراحل تبدیل یا کامپایل اضافی ندارند.
میتوانید از AI Edge Torch برای صادرات مدلهای PyTorch به مدلهای LiteRT ( tflite
) با امضای چندگانه استفاده کنید، که با پارامترهای توکنایزر برای ایجاد Task Bundle همراه هستند. مدلهای تبدیلشده با AI Edge Torch با API استنتاج LLM سازگار هستند و میتوانند روی باطن CPU اجرا شوند و برای برنامههای Android و iOS مناسب هستند.
شروع کنید
استفاده از این کار را با دنبال کردن یکی از این راهنماهای پیاده سازی برای پلتفرم هدف خود شروع کنید. این راهنماهای مخصوص پلتفرم شما را از طریق اجرای اساسی این کار با نمونههای کدی که از یک مدل موجود و گزینههای پیکربندی توصیهشده استفاده میکنند، راهنمایی میکنند:
جزئیات کار
این بخش قابلیت ها، ورودی ها، خروجی ها و گزینه های پیکربندی این کار را شرح می دهد.
ویژگی ها
LLM Inference API دارای ویژگی های کلیدی زیر است:
- تولید متن به متن - متن را بر اساس یک اعلان متن ورودی ایجاد کنید.
- انتخاب LLM - چندین مدل را برای تنظیم برنامه برای موارد استفاده خاص خود اعمال کنید. همچنین میتوانید وزنههای سفارشیشده را به مدل آموزش دهید و اعمال کنید.
- پشتیبانی LoRA - قابلیت LLM را با مدل LoRA گسترش دهید و سفارشی کنید، یا با آموزش روی تمام مجموعه دادههای خود، یا استفاده از مدلهای LoRA از پیش ساخته شده از جامعه منبع باز (با مدلهای تبدیل شده با AI Edge Torch Generative API سازگار نیست).
ورودی های وظیفه | خروجی های وظیفه |
---|---|
LLM Inference API ورودی های زیر را می پذیرد:
| API استنتاج LLM نتایج زیر را به دست می دهد:
|
گزینه های پیکربندی
این کار دارای گزینه های پیکربندی زیر است:
نام گزینه | توضیحات | محدوده ارزش | مقدار پیش فرض |
---|---|---|---|
modelPath | مسیری که مدل در دایرکتوری پروژه ذخیره می شود. | PATH | N/A |
maxTokens | حداکثر تعداد نشانهها (توکنهای ورودی + نشانههای خروجی) که مدل کنترل میکند. | عدد صحیح | 512 |
topK | تعداد نشانه هایی که مدل در هر مرحله از تولید در نظر می گیرد. پیشبینیها را به k توکنهای محتملتر محدود میکند. | عدد صحیح | 40 |
temperature | مقدار تصادفی معرفی شده در طول تولید. دمای بالاتر منجر به خلاقیت بیشتر در متن تولید شده می شود، در حالی که دمای پایین تر تولید قابل پیش بینی بیشتری را تولید می کند. | شناور | 0.8 |
randomSeed | دانه تصادفی مورد استفاده در تولید متن. | عدد صحیح | 0 |
loraPath | مسیر مطلق به مدل LoRA به صورت محلی در دستگاه. توجه: این فقط با مدل های GPU سازگار است. | PATH | N/A |
resultListener | شنونده نتیجه را طوری تنظیم می کند که نتایج را به صورت ناهمزمان دریافت کند. فقط هنگام استفاده از روش تولید غیر همگام قابل استفاده است. | N/A | N/A |
errorListener | یک شنونده خطای اختیاری را تنظیم می کند. | N/A | N/A |
مدل ها
LLM Inference API از بسیاری از مدلهای زبان بزرگ تبدیل متن به متن پشتیبانی میکند، از جمله پشتیبانی داخلی برای چندین مدل که برای اجرا در مرورگرها و دستگاههای تلفن همراه بهینه شدهاند. این مدل های سبک وزن را می توان برای اجرای استنباط ها به طور کامل روی دستگاه استفاده کرد.
قبل از مقداردهی اولیه API استنتاج LLM، یک مدل را دانلود کرده و فایل را در دایرکتوری پروژه خود ذخیره کنید. میتوانید از یک مدل از پیش تبدیلشده از مخزن LiteRT Community HuggingFace استفاده کنید، یا یک مدل را با تبدیلکننده AI Edge Torch Generative به یک قالب سازگار با MediaPipe تبدیل کنید.
اگر قبلاً یک LLM برای استفاده با LLM Inference API ندارید، با یکی از مدلهای زیر شروع کنید.
Gemma-3 1B
Gemma-3 1B آخرین مدل از خانواده مدلهای سبک وزن و پیشرفته Gemma است که از همان تحقیقات و فناوری استفاده شده برای ساخت مدلهای Gemini ساخته شده است. مدل شامل پارامترهای 1B و وزن باز است. نوع 1B سبک ترین مدل در خانواده Gemma است که آن را برای بسیاری از موارد استفاده روی دستگاه ایده آل می کند.
مدل Gemma-3 1B از HuggingFace در قالب .task
موجود است و برای استفاده با API استنتاج LLM برای برنامههای Android و وب آماده است.
هنگام اجرای Gemma-3 1B با LLM Inference API، گزینه های زیر را بر این اساس پیکربندی کنید:
-
preferredBackend
: از این گزینه برای انتخاب بینCPU
یاGPU
backend استفاده کنید. این گزینه فقط برای اندروید موجود است. -
supportedLoraRanks
: API استنتاج LLM را نمی توان برای پشتیبانی از سازگاری با رتبه پایین (LoRA) با مدل Gemma-3 1B پیکربندی کرد. از گزینه هایsupportedLoraRanks
یاloraRanks
استفاده نکنید. -
maxTokens
: مقدارmaxTokens
باید با اندازه زمینه تعبیه شده در مدل مطابقت داشته باشد. این همچنین می تواند به عنوان حافظه پنهان کلید-مقدار (KV) یا طول زمینه نامیده شود. -
numResponses
: همیشه باید 1 باشد. این گزینه فقط برای وب در دسترس است.
هنگام اجرای Gemma-3 1B بر روی برنامه های کاربردی وب، مقداردهی اولیه می تواند باعث ایجاد یک بلوک طولانی در رشته فعلی شود. در صورت امکان، همیشه مدل را از یک موضوع کارگر اجرا کنید.
Gemma-2 2B
Gemma-2 2B یک نوع 2B از Gemma-2 است و روی همه پلتفرم ها کار می کند.
مدل شامل 2B پارامتر و وزن باز است. Gemma-2 2B به دلیل مهارت های استدلالی پیشرفته برای مدل های هم رده خود شناخته شده است.
تبدیل مدل PyTorch
مدلهای مولد PyTorch را میتوان با AI Edge Torch Generative API به فرمت سازگار با MediaPipe تبدیل کرد. می توانید از API برای تبدیل مدل های PyTorch به مدل های LiteRT (TensorFlow Lite) با امضای چندگانه استفاده کنید. برای جزئیات بیشتر در مورد نقشه برداری و صادرات مدل ها، از صفحه AI Edge Torch GitHub دیدن کنید.
تبدیل یک مدل PyTorch با AI Edge Torch Generative API شامل مراحل زیر است:
- چک پوینت های مدل PyTorch را دانلود کنید.
- از AI Edge Torch Generative API برای نگارش، تبدیل و کمی کردن مدل به فرمت فایل سازگار با MediaPipe (
.tflite
) استفاده کنید. - یک Task Bundle (
.task
) از فایل tflite و توکنایزر مدل ایجاد کنید.
مبدل Torch Generative فقط برای CPU تبدیل می شود و به یک ماشین لینوکس با حداقل 64 گیگابایت رم نیاز دارد.
برای ایجاد یک Task Bundle، از اسکریپت bundling برای ایجاد یک Task Bundle استفاده کنید. فرآیند بستهبندی، مدل نگاشتشده را با ابردادههای اضافی (مثلاً پارامترهای Tokenizer) مورد نیاز برای اجرای استنتاج سرتاسر بسته بندی میکند.
فرآیند بستهبندی مدل به بسته MediaPipe PyPI نیاز دارد. اسکریپت تبدیل در تمام بسته های MediaPipe بعد از 0.10.14
در دسترس است.
وابستگی ها را با موارد زیر نصب و وارد کنید:
$ python3 -m pip install mediapipe
از کتابخانه genai.bundler
برای بسته بندی مدل استفاده کنید:
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
پارامتر | توضیحات | ارزش های پذیرفته شده |
---|---|---|
tflite_model | مسیر به مدل TFLite صادر شده توسط AI Edge. | PATH |
tokenizer_model | مسیر رسیدن به مدل توکنایزر SentencePiece. | PATH |
start_token | نشانه شروع خاص مدل توکن شروع باید در مدل توکنایزر ارائه شده وجود داشته باشد. | STRING |
stop_tokens | نشانه های توقف خاص را مدل کنید. توکن های توقف باید در مدل توکنایزر ارائه شده وجود داشته باشد. | LIST[STRING] |
output_filename | نام فایل بسته کار خروجی. | PATH |
سفارشی سازی LoRA
Mediapipe LLM inference API را می توان برای پشتیبانی از سازگاری با رتبه پایین (LoRA) برای مدل های زبان بزرگ پیکربندی کرد. توسعه دهندگان با استفاده از مدل های LoRA دقیق تنظیم شده می توانند رفتار LLM ها را از طریق یک فرآیند آموزشی مقرون به صرفه سفارشی کنند.پشتیبانی LoRA از LLM Inference API برای همه انواع Gemma و مدلهای Phi-2 برای باطن GPU کار میکند، با وزنهای LoRA فقط برای لایههای توجه قابل اعمال است. این پیادهسازی اولیه بهعنوان یک API آزمایشی برای پیشرفتهای آینده با برنامههایی برای پشتیبانی از مدلهای بیشتر و انواع لایههای مختلف در بهروزرسانیهای آتی عمل میکند.
مدل های LoRA را آماده کنید
دستورالعملهای HuggingFace را دنبال کنید تا یک مدل LoRA تنظیمشده را روی مجموعه دادههای خود با انواع مدلهای پشتیبانیشده، Gemma یا Phi-2 آموزش دهید. مدلهای Gemma-2 2B ، Gemma 2B و Phi-2 هر دو در HuggingFace در قالب محافظهای ایمنی موجود هستند. از آنجایی که LLM Inference API فقط از LoRA در لایه های توجه پشتیبانی می کند، در حین ایجاد LoraConfig
فقط لایه های توجه را به صورت زیر مشخص کنید:
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
برای آزمایش، مدلهای LoRA با تنظیم دقیق در دسترس عموم و متناسب با LLM Inference API موجود در HuggingFace وجود دارد. به عنوان مثال، monsterapi/gemma-2b-lora-maths-orca-200k برای Gemma-2B و lole25/phi-2-sft-ultrachat-lora برای Phi-2.
پس از آموزش بر روی مجموعه داده آماده شده و ذخیره مدل، یک فایل adapter_model.safetensors
حاوی وزن های مدل LoRA تنظیم شده به دست می آورید. فایل Safetensors نقطه بازرسی LoRA است که در تبدیل مدل استفاده می شود.
به عنوان گام بعدی، باید وزن های مدل را با استفاده از بسته MediaPipe Python به یک Flatbuffer Flatbuffer TensorFlow Lite تبدیل کنید. ConversionConfig
باید گزینه های مدل پایه و همچنین گزینه های LoRA اضافی را مشخص کند. توجه داشته باشید که از آنجایی که API فقط از استنتاج LoRA با GPU پشتیبانی می کند، backend باید روی 'gpu'
تنظیم شود.
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
مبدل دو فایل فلت بافر TFLite را خروجی می دهد، یکی برای مدل پایه و دیگری برای مدل LoRA.
استنتاج مدل LoRA
Web، Android و iOS LLM Inference API برای پشتیبانی از استنتاج مدل LoRA به روز شده است.
Android از LoRA ایستا در هنگام شروع اولیه پشتیبانی می کند. برای بارگذاری یک مدل LoRA، کاربران مسیر مدل LoRA و همچنین LLM پایه را مشخص می کنند.// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath('<path to base model>')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath('<path to LoRA model>')
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
برای اجرای استنتاج LLM با LoRA، از همان متدهای generateResponse()
یا generateResponseAsync()
به عنوان مدل پایه استفاده کنید.